﻿using System.Text.Json;

namespace game
{
    class 工具
    {
       
        public void 备战(ref NPC npc)
        {

            Console.WriteLine("选择要进行的操作：");
        标签1:
            Console.WriteLine("1 恢复生命 \n" +
                "2 获取生命回复药水 \n" +
                "e 退出当前模式 \n");
            switch (Console.ReadLine())
            {
                case "1":
                    npc.恢复生命(false);
                    break;
                case "2":
                    npc.GetHealthPotion();
                    break;
                case "e":
                    return;
                default:
                    Console.WriteLine("输入有无，请重新输入");
                    goto 标签1;
            }
        }
      
        /// <summary>
        /// 角色选择器，返回角色所对应的编号
        /// </summary>
        /// <param name="npcs">传入的角色列表集合</param>
        /// <param name="_模式">True为检测血量为零,否则忽略</param>
        /// <returns></returns>
        public int 选择角色(List<NPC> npcs ,bool _模式)
        {
        go:
            int 临时变量 = 0;

            //打印角色名字列表
            for (int i = 0; i < npcs.Count; i++)
            {
                Console.WriteLine($"{i}: {npcs[i].Name}");
            }

            try //主要防止输入非数字
            {
                Console.WriteLine("请输入角色编号：");
                临时变量 = int.Parse("" + Console.ReadLine());
                if (临时变量 >= 0 && 临时变量 < npcs.Count)
                {
                    Console.WriteLine("你选择了" + npcs[临时变量].Name);
                }
                else
                {
                    Console.WriteLine("输入的编号无效！请重新输入！");
                    goto go;
                }
            }
            catch (Exception)
            {
                Console.WriteLine("请输入纯数字");
                goto go;
            }

            if (_模式)
            {
                if (npcs[临时变量].HP <= 0)
                {
                    Console.WriteLine(npcs[临时变量].Name + "已经死了,无法战斗");
                    Console.WriteLine("请重新选择：");
                    goto go;
                }
            }
            else
            {
                Console.WriteLine("TA好像有点死了");
            }
                return 临时变量;
        }

        #region 存储操作


        private readonly string saveFilePath = "npcs.json";
        //保存角色
        public void SaveNpcs(List<NPC> npcs)
        {
            try
            {
                string json = JsonSerializer.Serialize(npcs);
                File.WriteAllText(saveFilePath, json);
                Console.WriteLine("游戏进度已保存！");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"保存游戏进度时出错: {ex.Message}");
            }
        }
        //加载角色
        public void LoadNpcs(ref List<NPC> npcs)
        {
            try
            {
                if (File.Exists(saveFilePath))
                {
                    string json = File.ReadAllText(saveFilePath);
#pragma warning disable CS8601 // 引用类型赋值可能为 null。
                    npcs = JsonSerializer.Deserialize<List<NPC>>(json);
#pragma warning restore CS8601 // 引用类型赋值可能为 null。
                    Console.WriteLine("游戏进度已加载！");
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"加载游戏进度时出错: {ex.Message}");
            }
        }

        #endregion
    }
}